package pr1.gui;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Date;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;

import pr1.bdd.Serie;
import pr1.bdd.Usuario;

public class MainWindow extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField busca;
	private JTable table;

	private JLabel nick;
	private JLabel lblEdad;
	private JTabbedPane tabbedPane;
	private JPanel buscaSeries;
	private JLabel lblBuscarSerie;
	private JList list;
	private ImageIcon icon;
	private GUIController gui;
	private JPanel misSeries;
	private JComboBox serieCombo;

	private DefaultListModel listModel;
	private DefaultComboBoxModel model;
	private Usuario usuario;
	private JLabel iconLabel;

	/**
	 * Create the frame.
	 */
	public MainWindow(GUIController gui) {
		super("Seguidores de series");
		this.gui = gui;
		this.model = new DefaultComboBoxModel(arraySigue());

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 492, 498);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		nick = new JLabel("Nick");
		nick.setFont(new Font("Verdana", Font.BOLD, 15));
		nick.setBounds(335, 32, 84, 35);
		contentPane.add(nick);

		lblEdad = new JLabel("Edad");
		lblEdad.setBounds(335, 99, 46, 14);
		contentPane.add(lblEdad);

		tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		tabbedPane.setBounds(10, 126, 456, 334);
		contentPane.add(tabbedPane);

		buscaSeries = new JPanel();
		tabbedPane.addTab("Buscar series", null, buscaSeries, null);
		buscaSeries.setLayout(null);

		lblBuscarSerie = new JLabel("Buscar serie:");
		lblBuscarSerie.setBounds(42, 11, 72, 14);
		lblBuscarSerie.setFont(new Font("Tahoma", Font.BOLD, 11));
		buscaSeries.add(lblBuscarSerie);

		busca = new JTextField();
		busca.setBounds(124, 8, 186, 20);
		buscaSeries.add(busca);
		busca.setColumns(10);

		JButton btnBuscar = new JButton("Buscar");
		btnBuscar.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnBuscar.setBounds(338, 7, 89, 23);
		buscaSeries.add(btnBuscar);
		btnBuscar.addActionListener(new BuscarListener());

		JButton btnVerInformacin = new JButton("Ver información");
		btnVerInformacin.setBounds(124, 272, 186, 23);
		btnVerInformacin.addActionListener(new InformacionListener());
		buscaSeries.add(btnVerInformacin);

		// ///List de busqueda
		JPanel listPanel = new JPanel();
		listPanel.setLayout(new BorderLayout());
		listPanel.setBounds(10, 36, 431, 237);
		buscaSeries.add(listPanel);

		listModel = new DefaultListModel();

		// Create the list and put it in a scroll pane.
		list = new JList(listModel);

		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.setSelectedIndex(0);
		list.setVisibleRowCount(5);
		JScrollPane listScrollPane = new JScrollPane(list);

		listPanel.add(listScrollPane, BorderLayout.CENTER);
		// ///Fin de list de busqueda

		misSeries = new JPanel();
		tabbedPane.addTab("Mis series", null, misSeries, null);
		misSeries.setLayout(null);

		JButton btnMarcarComoVisto = new JButton("Marcar como visto");
		btnMarcarComoVisto.setBounds(131, 269, 164, 23);
		misSeries.add(btnMarcarComoVisto);

		JLabel lblSerie = new JLabel("Serie:");
		lblSerie.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblSerie.setBounds(131, 11, 46, 14);
		misSeries.add(lblSerie);

		JLabel lblEpisodiosNoVistos = new JLabel("Episodios no vistos:");
		lblEpisodiosNoVistos.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblEpisodiosNoVistos.setBounds(10, 36, 119, 14);
		misSeries.add(lblEpisodiosNoVistos);

		table = new JTable();
		table.setBounds(10, 61, 431, 197);
		misSeries.add(table);

		serieCombo = new JComboBox(model);
		serieCombo.setBounds(187, 8, 254, 20);
		misSeries.add(serieCombo);

		this.iconLabel = new JLabel();
		iconLabel.setBounds(28, 11, 89, 90);
		iconLabel.addMouseListener(new FotoListener());
		contentPane.add(iconLabel);

		setVisible(true);
		this.setLocationRelativeTo(null);
	}

	@SuppressWarnings("deprecation")
	public void cargar(Usuario u) {
		this.usuario = u;
		this.nick.setText(u.getNick());
		Date date = u.getFechaNacimiento();
		Date hoy = new Date(2014, 05, 10);
		if (date != null) {
			int edad = hoy.getYear() - date.getYear() - 1900;
			this.lblEdad.setText(String.valueOf(edad) + " años");
		}

		try {
	
			icon = new ImageIcon(usuario.getFoto().getBytes(1L, (int)usuario.getFoto().length()));
			this.iconLabel.setIcon(icon);


		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	private void cargarBusqueda() {
		String busqueda = this.busca.getText();
		busqueda = busqueda.trim().replaceAll(" +", " ");
		if ((busqueda != null) && (busqueda != "")) {
			ArrayList<Serie> series = gui.cargarBusqueda(busqueda);
			int i = 0;
			String resultado;
			String fin;

			while (i < series.size()) {
				if (series.get(i).getAno_final() == 0) {
					fin = "?";
				} else
					fin = Integer.toString(series.get(i).getAno_final());
				resultado = series.get(i).getNombreSerie() + "  ("
						+ series.get(i).getAno_estreno() + " - " + fin + ")";
				listModel.addElement(resultado);
				i++;
			}
		}

	}

	private class BuscarListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			listModel.removeAllElements();
			cargarBusqueda();

		}

	}

	private class InformacionListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			if (serieSeleccionada() != null)
				new VerInformacion(serieSeleccionada(), gui);

		}

	}

	private Serie serieSeleccionada() {
		if (!listModel.isEmpty()) { // evitar excepcion si se pulsa ver
									// información sin que haya una serie
									// seleccionada
			if (list.getSelectedIndex()  != -1){
			String line = listModel.getElementAt(list.getSelectedIndex())
					.toString();
			String[] nombre = line.split("\\(");
			String s = nombre[0].replaceAll("\\s+$", "");// quita espacios al
															// principio y al
															// final
															// de la cadena
			return gui.busquedaSerieIndividual(s);}
			return null;
		}// Se busca la serie con ese
		else
			return null; // título.
	}

	private String[] arraySigue() {
		int i = 0;
		ArrayList<Serie> sigue = gui.seriesQueSigue();

		String[] comboBoxString = { "No estás siguiendo ninguna serie" };
		if (!sigue.isEmpty()) {
			String[] series = new String[sigue.size()];
			String fin;
			while (i < sigue.size()) {
				if (sigue.get(i).getAno_final() == 0) {
					fin = "?";
				} else
					fin = Integer.toString(sigue.get(i).getAno_final());
				series[i] = sigue.get(i).getNombreSerie() + "  ("
						+ sigue.get(i).getAno_estreno() + " - " + fin + ")";
				i++;

			}
			return series;
		}
		return comboBoxString;
	}

	public void actualizarCombo() {
		model = new DefaultComboBoxModel(arraySigue());
		this.serieCombo.setModel(model);

	}

	private class FotoListener implements MouseListener {

		@Override
		public void mouseClicked(MouseEvent arg0) {
			new EditarUsario(usuario, gui);

		}

		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub

		}

	}

}
